/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Mercado.model;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Rafael Gauna Trindade
 */
public class Compra {
    private List<Produto> itens;
    private List<Float> qtd, valor;
    private float total;
    private boolean finalizada;
    
    /**
     * Cria uma compra.
     * Inicializa uma compra com todos os campos nulos ou zerados, quando for o
     * caso.
     **/
    public Compra(){
        this.itens = new ArrayList<>();
        this.qtd = new ArrayList<>();
        this.valor = new ArrayList<>();
        this.total = 0;
        this.finalizada = false;
    }
    
    /**
     * Adiciona um item à compra.
     * Adiciona o item na quantidade informada e soma o valor total ao total da
     * compra.
     * @param p Produto a ser adicionado na compra.
     * @param q Quantidade referente ao item p;
     */
    public void addItem(Produto p, float q){
        if (!finalizada){
            if(itens.contains(p)){
                qtd.set(itens.indexOf(p), qtd.get(itens.indexOf(p))+q);
                valor.set(itens.indexOf(p),p.getPreco()*qtd.get(itens.indexOf(p)));
                total += p.getPreco()*q;
            }
            else{
                this.itens.add(p);
                this.qtd.add(q);
                this.valor.add(p.getPreco()*q);
                this.total += this.valor.get(this.valor.size()-1);
            }
        }
        else{
            System.out.println("A compra já foi finalizada!");
        }
    }
    
    /**
     * Remove um item da compra.
     * Remove um item da compra na última adição encontrada. Decrementa o total
     * da compra conforme a quantidade do item removido.
     * @param cod Código do produto a ser removido.
     */
    public void remItem(int cod){
        if (!finalizada){
            int pos = getPosItem(cod);
            if (pos>=0){
                this.itens.remove(pos);
                this.qtd.remove(pos);
                this.total -= this.valor.get(pos);
                this.valor.remove(pos);
            }
            else{
                System.out.println("Item não encontrado!");
            }
        }
        else{
            System.out.println("A compra já foi finalizada!");
        }
    }
    
    /**
     * Finaliza a compra.
     * Itens não poderão mais ser inseridos ou removidos.
     */
    public void finalizaCompra(){
        finalizada = true;
    }
    
    public boolean isFinalizada(){
        return finalizada;
    }
    
    private int getPosItem(int cod){
        int i=0;
        for (Produto item : this.itens) {
            if (item.getCodigo() == cod){
                return i;
            }
            i++;
        }
        return -1;
    }
    
    public void listaItens(){
        int i=0;
        System.out.println("Qtd.\tPreço\t\tNome\t\tCódigo\n---------------------------------------------------");
        for (Produto p: itens){
            System.out.println("x"+qtd.get(i)+"\tR$"+p.getPreco()+"\t\t"+p.getNome()+"\t\t"+p.getCodigo());
            i++;
        }
        System.out.println("Total: R$ "+total);
        
    }
    
    public Produto getItem(int i){
        return itens.get(i);
    }
    
    public float getValor(int i){
        return valor.get(i);
    }
    
    public float getQtd(int i){
        return qtd.get(i);
    }
    
    public int getTotalItens(){
        return itens.size();
    }
    
    public float getTotalPreco(){
        return total;
    }
    
    public List<Produto> getItens(){
        return itens;
    }
}
